<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>uupaa-detect.js - Reference</title>
<style type="text/css">@import url(./README.css);</style>
<script type="text/javascript" src="uupaa-detect.js"></script>
<script type="text/javascript" src="DETECT.js"></script>
</head>
<body>
<p>
   | <a href="http://code.google.com/p/uupaa-js-spinoff/">Project Home(Google Code)</a>
   | <a href="./README.htm">README</a>
   | <a href="./CLASS.htm">Reference</a> |<br />
   | <a href="./CHANGELOG.htm">ChangeLog</a>
   | <a href="./LICENSE.htm">License</a>
   | <a href="http://uupaa-js.googlecode.com/svn/trunk/GLOSSARY.htm">Glossary</a>
   |
</p>

<hr />
|
<a href="#uuClass.Detect">uuClass.Detect</a> |
<a href="#uu.url">uu.url</a> |
<a href="#OOPClass">OOP Class</a> |

<hr />
<h2><a name="uuClass.Detect">Detect User-Agent and Functions</a> - ブラウザと機能の判別</h2>
<p><span lang="en">Information on a browser and browser functions is offered.</span>
   <br /><span lang="ja">ブラウザの判別や、ブラウザで使用可能な機能について情報を提供します。</span></p>
<table>
<tr><th>Property</th><th>Type</th><th>Value</th><th>Detect</th></tr>
<tr><td><a name="uuClass.Detect.ie">uuClass.Detect.ie</a></td><td>Boolean</td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/i32.png" alt="" />
              IE base browser is true</td><td><span id="ie">false</span></td></tr>
<tr><td><a name="uuClass.Detect.ie8">uuClass.Detect.ie8</a></td><td>Boolean</td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/i32.png" alt="" />
              IE >= 8 is true</td><td><span id="ie8">false</span></td></tr>
<tr><td><a name="uuClass.Detect.ie8mode8">uuClass.Detect.ie8mode8</a></td><td>Boolean</td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/i32.png" alt="" />
              <span lang="en">IE >= 8 and documentMode >= IE8 is true</span>
              <br />
              <span lang="ja">IE 8以上で、ドキュメントモードが IE8 以上なら true</span></td><td><span id="ie8mode8">false</span></td></tr>
<tr><td><a name="uuClass.Detect.ie7">uuClass.Detect.ie7</a></td><td>Boolean</td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/i32.png" alt="" />
              IE 7 is true</td><td><span id="ie7">false</span></td></tr>
<tr><td><a name="uuClass.Detect.ie6">uuClass.Detect.ie6</a></td><td>Boolean</td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/i32.png" alt="" />
              IE 6 is true</td><td><span id="ie6">false</span></td></tr>

<tr><td><a name="uuClass.Detect.gecko">uuClass.Detect.gecko</a></td><td>Boolean</td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/f32.png" alt="" />
              Gecko base browser(Firefox, Camino) is true</td><td><span id="gecko">false</span></td></tr>
<tr><td><a name="uuClass.Detect.fx40">uuClass.Detect.fx40</a></td><td>Boolean</td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/f32.png" alt="" />
              Firefox 4.0+ is true</td><td><span id="fx40">false</span></td></tr>
<tr><td><a name="uuClass.Detect.fx31">uuClass.Detect.fx31</a></td><td>Boolean</td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/f32.png" alt="" />
              Firefox 3.1 ~ 3.9 is true</td><td><span id="fx31">false</span></td></tr>
<tr><td><a name="uuClass.Detect.fx30">uuClass.Detect.fx30</a></td><td>Boolean</td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/f32.png" alt="" />
              Firefox 3.0 is true</td><td><span id="fx30">false</span></td></tr>
<tr><td><a name="uuClass.Detect.fx20">uuClass.Detect.fx20</a></td><td>Boolean</td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/f32.png" alt="" />
              Firefox 2.0 is true</td><td><span id="fx20">false</span></td></tr>

<tr><td><a name="uuClass.Detect.webkit">uuClass.Detect.webkit</a></td><td>Boolean</td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/s32.png" alt="" />
            <img src="http://uupaa-js.googlecode.com/svn/trunk/img/c32.png" alt="" />
              WebKit base browser(Safari, Chrome, Konqueror) is true</td><td><span id="webkit">false</span></td></tr>
<tr><td><a name="uuClass.Detect.safari3">uuClass.Detect.safari3</a></td><td>Boolean</td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/s32.png" alt="" />
              Safari 3+ is true</td><td><span id="safari3">false</span></td></tr>
<tr><td><a name="uuClass.Detect.ipod">uuClass.Detect.ipod</a></td><td>Boolean</td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/s32.png" alt="" />
              iPod or iPhone is true</td><td><span id="ipod">false</span></td></tr>
<tr><td><a name="uuClass.Detect.chrome">uuClass.Detect.chrome</a></td><td>Boolean</td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/c32.png" alt="" />
              Google Chrome is true</td><td><span id="chrome">false</span></td></tr>

<tr><td><a name="uuClass.Detect.opera">uuClass.Detect.opera</a></td><td>Boolean</td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/o32.png" alt="" />
              Opera base browser(Opera, Wii) is true</td><td><span id="opera">false</span></td></tr>
<tr><td><a name="uuClass.Detect.opera100">uuClass.Detect.opera100</a></td><td>Boolean</td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/o32.png" alt="" />
              Opera 10+ is true</td><td><span id="opera100">false</span></td></tr>
<tr><td><a name="uuClass.Detect.opera95">uuClass.Detect.opera95</a></td><td>Boolean</td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/o32.png" alt="" />
              Opera 9.5 ~ 9.9 is true</td><td><span id="opera95">false</span></td></tr>
<tr><td><a name="uuClass.Detect.opera90">uuClass.Detect.opera90</a></td><td>Boolean</td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/o32.png" alt="" />
              Opera 9.0 ~ 9.4 is true</td><td><span id="opera90">false</span></td></tr>
<tr><td><a name="uuClass.Detect.wii">uuClass.Detect.wii</a></td><td>Boolean</td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/o32.png" alt="" />
              Wii Internet channel(Opera 9.5) is true</td><td><span id="wii">false</span></td></tr>

<tr><td><a name="uuClass.Detect.air">uuClass.Detect.air</a></td><td>Boolean</td>
        <td>Adobe AIR is true</td><td><span id="air">false</span></td></tr>
<tr><td><a name="uuClass.Detect.std">uuClass.Detect.std</a></td><td>Boolean</td>
        <td><span lang="en">Standards-compliant mode is true, Quirks mode is false</span>
            <br /><span lang="ja">標準モードなら true, 互換モードなら false</span>
            </td><td><span id="std">false</span></td></tr>
<tr><td><a name="uuClass.Detect.selector">uuClass.Detect.selector</a></td><td>Boolean</td>
        <td><span lang="en">Selectors API(querySelector and querySelectorAll) support is true</span> 
            <br /><span lang="ja">Selectors API(querySelector, querySelectorAll)が使用可能なら true</span></td><td><span id="selector">false</span></td></tr>
<tr><td><a name="uuClass.Detect.range">uuClass.Detect.range</a></td><td>Boolean</td>
        <td><span lang="en">DOM Level2 Range Module support is true</span> 
            <br /><span lang="ja">DOM Level2 Range Module が使用可能なら true</span></td><td><span id="range">false</span></td></tr>
<tr><td><a name="uuClass.Detect.etraverse">uuClass.Detect.etraverse</a></td><td>Boolean</td>
        <td><span lang="en">DOM Element Traversal Module support is true</span>
            <br /><span lang="ja">DOM Element Traversal Module が使用可能なら true</span></td><td><span id="etraverse">false</span></td></tr>
<tr><td><a name="uuClass.Detect.disptable">uuClass.Detect.disptable</a></td><td>Boolean</td>
        <td><span lang="en">CSS(display: table) support is true</span>
            <br /><span lang="ja">CSS(display: table) が使用可能なら true</span></td><td><span id="disptable">false</span></td></tr>
<tr><td><a name="uuClass.Detect.minquartz">uuClass.Detect.minquartz</a></td><td>Number<br />10 or 16</td>
        <td><span lang="en">Minimum resolution of setInterval() and setTimeout()(unit: ms)</span>
            <br /><span lang="ja">setInterval(), setTimeout() の最小分解能(単位: ms)</span></td><td><span id="minquartz">0</span></td></tr>
<tr><td><a name="uuClass.Detect.base">uuClass.Detect.base</a></td><td>String</td>
        <td><span lang="en">Base URL(same directory as uupaa-detect.js or uupaa.js)</span>
            <br /><span lang="ja">Base URL(uupaa-detect.js または uupaa.js が配置されているディレクトリ)</span></td><td><span id="base" style="font-size: x-small">""</span></td></tr>
<!--
<tr><td><a name="uuClass.Detect.docroot">uuClass.Detect.docroot</a></td><td>Element</td>
        <td>document root element</td><td><span id="docroot">null</span></td></tr>
 -->
<tr><td><a name="uuClass.Detect.version">uuClass.Detect.version</a></td><td>Number</td>
        <td>browser(engine) version or build version</td><td><span id="version">false</span></td></tr>
</table>

<table>
<caption>uuClass.Detect.version examples</caption>
<tr><th>Browser</th><th>uuClass.Detect.version</th></tr>
<tr><td>Firefox 2.0.0.14</td><td>20080404</td></tr>
<tr><td>Firefox 3.0.3</td><td>20080924</td></tr>
<tr><td>Safari 3.1</td><td>525.13</td></tr>
<tr><td>Opera 9.5β</td><td>9.5</td></tr>
<tr><td>Opera 9.61</td><td>9.61</td></tr>
<tr><td>IE 5.5</td><td>5.5</td></tr>
<tr><td>IE 6</td><td>6</td></tr>
<tr><td>IE 7</td><td>7</td></tr>
<tr><td>IE 8</td><td>8</td></tr>
</table>


<hr />
<h2><a name="uu.url">URL manipulator</a> - URL の操作</h2>
<p>URL の取り扱いを簡単にします。</p>
<hr />
<dl>
<!-- -->
  <dt><a name="uu.url">uu.url</a> - parse and build URL - URL の分解と構築</dt>
  <dd><p>uu.url(<i>url</i> = ".") は絶対 URL または 相対 URL を分解し、
      URL の構成要素を格納した Hash を返します。</p>
      <p><i>url</i> に Hash を指定すると、Hash を元に構築した URL を返します。</p>
<pre>
@param String      [url] - 絶対 URL または相対 URL を指定します。デフォルトは "." です。
       /Hash               Hash も指定できます。
@return Hash/false       - URL 文字列の分解に成功した場合は URL の構成要素を格納した Hash を返します。
        /String            URL の分解に失敗した場合は false を返します。
                           <i>url</i> に Hash が指定された場合は、URL 文字列を返します。
</pre>
<table>
<caption>uu.url("http://wwww.example.com:8080/dir/file.ext?key1=value1&key2=value2#menu1"); の戻り値</caption>
<tr><th>Hash property</i></th><th>Value</th><th>Type</th><th>Example</th></tr>
<tr><td><b>scheme</b></td><td>スキーム</td><td>String</td><td>"http"</td></tr>
<tr><td><b>domain</b></td><td>ドメイン</td><td>String</td><td>"www.example.com"</td></tr>
<tr><td><b>port</b></td><td>ポート番号</td><td>String</td><td>"8080"<br />ポート番号が省略されている場合は ""</td></tr>
<tr><td><b>path</b></td><td>パス</td><td>String</td><td>"/dir/file.ext"<br />パスが省略されている場合は "/"</td></tr>
<tr><td><b>query</b></td><td>QueryString</td><td>String</td><td>"key1=value1&key2=value2"<br />QueryStringが省略されている場合は ""</td></tr>
<tr><td><b>fragment</b></td><td>フラグメント</td><td>String</td><td>"menu1"<br />フラグメントが省略されている場合は ""</td></tr>
<tr><td>url</td><td>絶対 URL</td><td>String</td><td>"http://wwww.example.com:8080/dir/file.ext?key1=value1&key2=value2#menu1"</td></tr>
<tr><td>base</td><td>スキーム<br />+ ドメイン<br />+ ポート番号<br />+ ディレクトリ</td><td>String</td><td>"http://wwww.example.com:8080/dir/"</td></tr>
<tr><td>dir</td><td>ディレクトリ</td><td>String</td><td>"/dir"<br />ディレクトリが省略されている場合は "/"</td></tr>
<tr><td>file</td><td>ファイル名[.拡張子]</td><td>String</td><td>"file.ext"<br />ファイル名が省略されている場合は ""</td></tr>
<tr><td>hash</td><td>uu.url.query(<i>QueryString</i>)の<br />実行結果</td><td>Hash</td><td>{ key1: "value1", key2: "value2" }<br />QueryStringが省略されている場合は {}</td></tr>
</table>

<table>
<caption>uu.url(<i>url</i>) で有効なプロパティの一覧</caption>
<tr><th>Hash property</i></th><th>Value</th><th>Type</th><th>Example</th></tr>
<tr><td><b>scheme</b></td><td>スキーム</td><td>String</td><td>"http"<br />このプロパティは省略できません。</td></tr>
<tr><td><b>domain</b></td><td>ドメイン</td><td>String</td><td>"www.example.com"<br />このプロパティは省略できません。</td></tr>
<tr><td><b>port</b></td><td>ポート番号</td><td>String</td><td>"8080"<br />ポート番号が不要なら省略するか "" を指定します</td></tr>
<tr><td><b>path</b></td><td>パス</td><td>String</td><td>"/dir/file.ext"<br />パスが不要なら省略するか "" を指定します</td></tr>
<tr><td><b>query</b></td><td>QueryString</td><td>String</td><td>"key1=value1&key2=value2"<br />QueryStringが不要なら省略するか "" を指定します</td></tr>
<tr><td><b>fragment</b></td><td>フラグメント</td><td>String</td><td>"menu1"<br />フラグメントが不要なら省略するか "" を指定します</td></tr>
<tr><th colspan="4">以下のプロパティは使用されません(無視されます)</th></tr>
<tr><td>url</td><td></td><td></td><td></td></tr>
<tr><td>base</td><td></td><td></td><td></td></tr>
<tr><td>dir</td><td></td><td></td><td></td></tr>
<tr><td>file</td><td></td><td></td><td></td></tr>
<tr><td>hash</td><td></td><td></td><td></td></tr>

</table>
<a href="javascript:alert(uu.url({scheme:'http',domain:'www.example.com',port:8080,path:'/dir/file.ext',query:'key1=value1&key2=value2',fragment:'menu1'}));void 0" class="run">Run</a>
<pre class="eg">
alert(<b>uu.url</b>({
  scheme: 'http',
  domain: 'www.example.com',
  port: 8080,
  path: '/dir/file.ext',
  query: 'key1=value1&key2=value2',
  fragment: 'menu1'
}));
</pre>
<p><a href="javascript:alert(uu.url(uu.url('.')));void 0" class="run">Run</a> uu.url は可逆です</p>
<pre class="eg">
alert(<b>uu.url</b>(<b>uu.url</b>('.')));
</pre>
  </dd>

<!-- -->
  <dt><a name="uu.url.toAbsURL">uu.url.toAbsURL</a> - to absolute URL - 絶対 URL 化</dt>
  <dd><p>uu.url.toAbsURL(<i>url</i> = ".") は 相対URL(<i>path</i>)を絶対 URL に変換します。
      <i>url</i> が絶対 URL ならそのまま返します。</p>
<pre>
@param String url - 相対 URL を指定します。絶対 URL も指定可能です。デフォルトは "." です。
                    "." を指定するとカレント URL を絶対 URL に変換します。
@return String    - 絶対 URL を返します。
</pre>
<a href="javascript:alert(uu.url.toAbsURL());void 0" class="run">Run</a>
<pre class="eg">
alert(<b>uu.url.toAbsURL</b>());
</pre>
  </dd>

<!-- -->
  <dt><a name="uu.url.query">uu.url.query</a> - parse and build QueryString - QueryString の分解と構築</dt>
  <dd><p>uu.url.parseQuery(<i>qstr</i>) は
         <i>query</i> を分解し Hash( { key: value, ... } )を返します。</p>
      <p><i>query</i> に Hash を指定すると、Hash を元に構築した QueryString を返します。</p>

<pre>
@param String query - QueryString を指定します。
       /Hash          Hash も指定できます。
@return Hash        - 分解した結果を返します。
        /String       <i>query</i> に Hash を指定した場合は、構築した QueryString を返します。
</pre>
<a href="javascript:var query=uu.url.query('key1=value1&amp;key2=value2');alert(uu.url.query(query));void 0" class="run">Run</a>
<pre class="eg">
var query = <b>uu.url.query</b>('key1=value1&amp;key2=value2'); <u>// query = { key1: "value1", key2: "value2" }</u>
alert(<b>uu.url.query</b>(query)); <u>// "key1=value1&amp;key2=value2"</u>
</pre>

<p><a href="javascript:var query=uu.url.query('#KEY#=日本語');alert(uu.url.query(query));void 0" class="run">Run</a>
 適切にURIエンコードを行います</p>
<pre class="eg">
var query = <b>uu.url.query</b>('#KEY#=日本語'); <u>// query = { "#KEY#": "日本語" }</u>
alert(<b>uu.url.query</b>(query)); <u>// "%23KEY%23=%E6%97%A5%E6%9C%AC%E8%AA%9E" URIエンコード済み</u>
</pre>

<p><a href="javascript:alert(uu.url.query(uu.url.query('key=value')));void 0" class="run">Run</a> uu.url.query は可逆です</p>
<pre class="eg">
alert(<b>uu.url.query</b>(<b>uu.url.query</b>('key=value')));
</pre>

  </dd>
</dl>







<hr />
<h2><a name="OOPClass">OOP Class</a></h2>
<p>オブジェクト指向的な"クラス"を JavaScript でも使えるようにします。</p>
<table>
<tr><th rowspan="2">Syntax</th>
    <th colspan="5">Feature<br /><span lang="ja">機能</span></th>
    <th rowspan="2">Role<br /><span lang="ja">役割</span></th></tr>
<tr><td>カプセル化</td><td>constructor</td><td>destructor</td><td>message pump</td><td>singleton</td></tr>
<tr><td>uuClass()</td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/check.png" alt="v" /></td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/check.png" alt="v" /></td>
        <td>-</td>
        <td>-</td>
        <td>-</td>
        <td>シンプルな機能を提供する</td>
        </tr>
<tr><td>uuClass.Generic()</td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/check.png" alt="v" /></td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/check.png" alt="v" /></td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/check.png" alt="v" /></td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/check.png" alt="v" /></td>
        <td>-</td>
        <td>汎用的な機能を提供する</td>
        </tr>
<tr><td>uuClass.Singleton()</td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/check.png" alt="v" /></td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/check.png" alt="v" /></td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/check.png" alt="v" /></td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/check.png" alt="v" /></td>
        <td><img src="http://uupaa-js.googlecode.com/svn/trunk/img/check.png" alt="v" /></td>
        <td>データを一元的に管理する機能を提供する</td>
        </tr>
</table>

<p>シンプルなクラスには uuClass() を、より複雑なクラスには uuClass.Generic() を使用してください。
<br />グローバル変数やグローバル関数の代わりに uuClass.Singleton() を使うこともできます。</p>
<hr />
<dl>

<!-- -->
  <dt><a name="uuClass">uuClass</a> - create "Keep It Simple, Stupid" class - シンプルなクラスの雛形を生成</dt>
  <dd>
    <p>uuClass(<i>args, ...</i>) は、シンプルなクラスの雛形を生成します。</p>
<pre>
@param <a href="http://uupaa-js.googlecode.com/svn/trunk/GLOSSARY.htm#TypeMix">Mix</a> [...] - constructに渡す引数をいくつでも指定できます。
@return Function - シンプルなクラスの雛形を生成するクロージャを返します。
</pre>
    <p>uuClass は、2つの機能を持ちます。</p>
    <ul>
      <li>カプセル化し、役割を明確にします。</li>
      <li><b>construct</b> メソッドが定義されている場合は、インスタンス生成時に construct メソッドを自動的に呼び出します。</li>
    </ul>
<p><a href="demo/uuClass.htm" class="run">Run</a> new MyClass(arg1, arg2); は、
       construct(arg1, arg2) を呼び出します。</p>
<pre class="eg">
function boot() {
  var MyClass = <b>uuClass</b>();
  MyClass.prototype = {
    <b>construct</b>: function(var1, var2 <u>/*, ... */</u>) {
      <u>// 初期化</u>
      this._var1 = var1;
      this._var2 = var2;
    },
    method: function() {
      return this._var1 * this._var2;
    }
  };
  var my = new <b>MyClass</b>(<b>10, 20</b>); <u>// 自動的に construct() を実行する。</u>
  document.getElementById("log").innerHTML += my.method(); <u>// "200"</u>
}
window.onload = boot;
</pre>
  </dd>

<!-- -->
  <dt><a name="uuClass.Generic">uuClass.Generic</a> - create generic class - 汎用クラスの雛形を生成</dt>
  <dd>
    <p>uuClass.Generic(<i>args, ...</i>) は、汎用的なクラスの雛形を生成します。</p>
<pre>
@param <a href="http://uupaa-js.googlecode.com/svn/trunk/GLOSSARY.htm#TypeMix">Mix</a> [...] - construct に渡す引数をいくつでも指定できます。
@return Function - 汎用クラスの雛形を生成するクロージャを返します。
</pre>

    <p>uuClass.Generic() は <a href="#uuClass">uuClass</a>() に機能を追加したものです。より幅広い用途に利用可能です。</p>
    <ol>
      <li>カプセル化し、役割を明確にします。</li>
      <li><b>construct</b> メソッドが定義されている場合は、インスタンス生成時に construct メソッドを自動的に呼び出します。</li>
      <li><b>destruct</b> メソッドが定義されている場合は、ページ遷移時に destruct メソッドを自動的に呼び出します。</li>
      <li>個々のインスタンスを識別するために システム全体を通じてユニーク(唯一)な値を持つ uuid プロパティを自動で追加します(既に存在する場合は追加しません)。</li>
      <li><b>msgbox</b> メソッドが定義されている場合は メッセージポンプに登録し(uuClass.MsgPump.regist)使えるようにします。</li>
    </ol>
  </dd>
<!-- -->
  <dt><a name="uuClass.Singleton">uuClass.Singleton</a> - create singleton class - シングルトンクラスの雛形を生成</dt>
  <dd>
    <p>uuClass.Singleton(<i>args, ...</i>) は、シングルトンクラスの雛形を生成します。</p>
    <p>シングルトンパターンを JavaScript で実装したものです。<br />
       一つ存在すれば十分なものや、new する度に新しく生成できてしまうとまずいものはシングルトンクラスにします。</p>
<pre>
@param <a href="http://uupaa-js.googlecode.com/svn/trunk/GLOSSARY.htm#TypeMix">Mix</a> [...] - construct に渡す引数をいくつでも指定できます。
@return Function - Singleton クラスの雛形を生成するクロージャを返します。
</pre>
    <p>uuClass.Singleton は <a href="#uuClass.Generic">uuClass.Generic</a> に、機能を追加したものです。</p>
    <ol>
      <li>カプセル化し、役割を明確にします。</li>
      <li>new 済みのインスタンスがある場合は、新しくインスタンスを生成せずに、既存のインスタンスへの参照を返します。</li>
      <li><b>construct</b> メソッドが定義されている場合は、1度目の new で construct メソッドを呼び出します。</li>
      <li><b>stabled</b> メソッドが定義されている場合は、2度目以降の new で stabled メソッドを呼び出します。</li>
      <li><b>destruct</b> メソッドが定義されている場合は、インスタンス破棄 や ページ遷移時に destruct メソッドを自動的に呼び出します。</li>
      <li>個々のインスタンスを識別するために システム全体を通じてユニーク(唯一)な値を持つ uuid プロパティを自動で追加します(既に存在する場合は追加しません)。</li>
      <li><b>msgbox</b> メソッドが定義されている場合は メッセージポンプに登録し(uuClass.MsgPump.regist)使えるようにします。</li>
    </ol>

<p><a href="demo/uuClass.Singleton.htm" class="run">Run</a>
  何度 new してもシングルトンクラスの実体は一つしか生成されません</p>
<pre class="eg">
var MyClass = <b>uuClass.Singleton</b>();
MyClass.prototype = {
  <b>construct</b>:  function() { log("call construct");  },
  <b>stabled</b>:    function() { log("call stabled");    },
  <b>destruct</b>:   function() { log("call destruct");   },
  method:     function() { log("call method");     }
};
var my = new <b>MyClass</b>();
my.method();

var my2 = new <b>MyClass</b>(); <u>// 二度目のnew</u>
my.method();

log(my === my2); <u>// "true"  myとmy2は同じもの(シングルトン)</u>

window.setTimeout(function() {
  if (window.confirm("jump to http://www.example.com/")) {
    <u>// ページ遷移が発生するため、自動的に destruct() を1度だけ実行する。</u>
    window.location.href = "http://www.example.com/";
  }
}, 1000);
</pre>
  </dd>
</dl>




<script type="text/javascript">
window.onload = function() {
  detect();
}
</script>

</body>
</html>
